import java.util.*;
/**
 * Die Interface Klasse BL_CRUD gibt eine Vorgabe für die Implementierung von Klassen der Datenhaltungsklassen Raum, Lehrveranstaltung, Dozent und Studiengang.
 * Um eine großtmögliche Flexibilität zur gewährleisten wurde der Mechanismus der Generics genutzt.
 * 
 *@param <T> Der Klassentyp der für die Implementierung des Interfaces genutzt wird.
 * 
 * @author Kai Gutzeit
 * @version 13.12.2014
 */
public interface BL_CRUD<T>
{
    /**
     * Die Create Methode bekommt als Parameter ein Objekt vom Typ T, welches die grundlegenden Informationen des Datenhaltungsobjektes enthält.
     * Vor hinzufügen des Objektes in die private variable businessObjects wird noch ein eindeutiger Schlüssel für das Objekt vom Typ UUID erzeugt.
     * Bei Erfolg wird dasselbe Objekt ergänzt mit einer eindeutigen ID zurückgegeben. In der Klasse welches das Interface implementiert muss sollte eine List<T> private Variable
     * vorhanden sein, welche in der Lage ist eine Referenz aufzubauen.
     * 
     * @param  iBusinessObject übergibt die Referenz zu einem Geschäftsobjekt vom Typ T, so dass diese Referenz einer Aufzählung hinzugefügt werden kann.
     * 
     * @return Das erstellte Objekte mit einer eindeutig erzeugten UUID als ID.
     * 
     * @exception IllegalArgumentException Die zu implementierende Methode kann eine IllegalArgumentException werfen in welcher Detail Information zum fehlschlagen der Operation enthalten sind.
     */
    public T Create(T iBusinessObject) throws IllegalArgumentException;
    
     /**
     * Die Read Methode erlaubt es anhand eines eindeutigen Schlüssel ein Geschäftsobjekt aus einer Aufzählung zu erhalten. Diese Aufzählung sollte als private Variable in der Klasse vorhanden sein.
     * Und bestmöglich bei Instanziierung (also im Konstruktor) übergeben werden.
     * 
     * @param  id id Es wird eine eindeutige id vom Typ UUID übergeben.
     * 
     * @return Das zu lesende Objekt vom Typ T.
     * 
     * @exception IllegalArgumentException Die zu implementierende Methode kann eine IllegalArgumentException werfen in welcher Detail Information zum fehlschlagen der Operation enthalten sind.
     */
    public T Read(UUID id) throws Exception;
    
     /**
     * Die Update Methode übermittelt ein komplettes Objekt vom Typ T und sorgt für das aktualisieren des jeweiligen Objektes in einer Aufzählung.
     * 
     * @param  iBusinessObject Es wird das zu aktualisierende Objekt vom Typ T übergeben.
     * 
     * @return Ein boolscher Wert für den Erfolg oder Nichterfolg der Update-Operation.
     * 
     * @exception IllegalArgumentException Die zu implementierende Methode kann eine IllegalArgumentException werfen in welcher Detail Information zum fehlschlagen der Operation enthalten sind.
     */
    public Boolean Update(T iBusinessObject) throws Exception;
    
     /**
     * Die Delete Methode bekommmt eine id als UUID Objekt übergeben, welches das Objekt aus einer Aufzählung eindeutig identifiziert und anschließend entfernt.
     * 
     * @param  UUID id Es wird eine eindeutige id vom Typ UUID übergeben.
     * 
     * @return Ein boolscher Wert für den Erfolg oder Nichterfolg der Delete-Operation.
     * 
     * @exception IllegalArgumentException Die zu implementierende Methode kann eine IllegalArgumentException werfen in welcher Detail Information zum fehlschlagen der Operation enthalten sind.
     */
    public Boolean Delete(UUID id) throws Exception;
}
